// https://leetcode.cn/problems/house-robber/submissions/544654204/
class Solution {
public:
    int rob(vector<int>& nums) {
        //如果偷了x家，那么x-1的家就偷不了，总价值是x-2的价值加上x家
        //如果不偷x家，那么价值维持x-1家
        //dp[i] = dp[i-1], dp[i-2] + nums[i]
        using namespace std;
        int n = nums.size();

        if (n == 1) {
            return nums[0];
        } else if (n == 2) {
            return max(nums[0], nums[1]);
        }

        long long dp[101] {0};
        dp[0] = nums[0];
        dp[1] = max((int)dp[0], nums[1]);
        
        for (int i = 2; i < n; i++) {
            dp[i] = max(dp[i-1], dp[i-2] + nums[i]);
        }
        return dp[n-1];
    }
};